<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        function Fn(a) {
            this.a = a

            //简单数据类型
            // return 2222
            // 引用数据类型
            // return { uname: 'ikun' }
            // return [1, 2, 3]
            // return function () {
            //     console.log(1);
            // }
            // return /123/
        }

        const obj = new Fn(1)
        const obj2 = new Fn(1231)
        console.log(obj);
        console.log(obj2);

        //过程
        //1.创建一个空对象
        // const obj = new Object()
        //2.改空对象的原型的指向（继承方法）
        // obj.__proto__ = Fn.prototype
        //3.改this的指向 （获取属性），执行构造函数的函数体
        // Fn.call(obj, a)
        //4.返回新对象
        //判断构造函数的返回值是否为引用数据类型，
        // 如果是引用数据类型，则返回构造函数的返回值，
        // 否则返回新创建的对象
        // if (Fn.call(obj, a) 是否为引用数据类型 ) return Fn.call(obj, a)
        // else { return obj }

        // if (Fn.call(obj, a) instanceof Object) return Fn.call(obj, a)
        // else { return obj }

    </script>
</body>

</html>